/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.cpqd.ssar.gerenciador;

import br.com.cpqd.ssar.gerenciador.gui.PainelGerenciador;
import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author igorj
 */
public class VerificarStatus extends TimerTask {

    Toolkit toolkit;
    Timer timer;
    GerenciamentoNucleo managementCore;
    int flag = 0;
    Status status;
    private Collection<VerificarStatusListener> verificarStatusListeners = new ArrayList<VerificarStatusListener>();

    public VerificarStatus(GerenciamentoNucleo core, Status status) {

        this.managementCore = core;
        this.status = status;

    }
    
    public void setStatus(int v){
        flag = v;
    }

    public int getStatus() {
        return flag;
    }

    @Override
    public void run() {

        FileInputStream is = null; // Stream de Entrada
        BufferedReader br;  // Buffer de leitura
        /* Primeiro é lido o arquivo 'status.txt' */
        try {
            // Buffer de leitura
                /* Primeiro é lido o arquivo 'status.txt' */

            is = new FileInputStream(managementCore.getInterfaceServicos().getCaminhoProjeto() + "\\" + managementCore.getInterfaceServicos().getNomeProjeto() + "\\DadosSimulacao\\br_fdtd_status.txt");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(VerificarStatus.class.getName()).log(Level.SEVERE, null, ex);
        }
        br = new BufferedReader(new InputStreamReader(is));
        String s = null;

        try {
            s = br.readLine(); 
        } catch (IOException ex) {
            Logger.getLogger(VerificarStatus.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("s: " + s);
        flag = Integer.valueOf(s);
        if (flag == 1){
            try {
               
                // Escrevendo 0 no arquivo de simulação
                PrintWriter pw = new PrintWriter(new FileWriter(managementCore.getInterfaceServicos().getCaminhoProjeto() + "\\" + managementCore.getInterfaceServicos().getNomeProjeto() + "\\DadosSimulacao\\br_fdtd_status.txt"));
                pw.print('0');
                pw.close();
            } catch (IOException ex) {
                Logger.getLogger(PainelGerenciador.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        notificarStatusSimulacao();

    }

    /**
     * Adiciona um novo Listener de eventos a classe VerificarStatus
     * @param VerificarStatusListener l
     */
    public synchronized void addRenderListener(VerificarStatusListener l) {
        if (!verificarStatusListeners.contains(l)) {
            verificarStatusListeners.add(l);
        }
    }

    /**
     * Remove Listener de eventos da classe VerificarStatus
     * @param VerificarStatusListener l
     */
    public synchronized void removeRenderListener(VerificarStatusListener l) {

        verificarStatusListeners.remove(l);
    }

    /**
     * Notifica geometria inserida aos Listeners previamente adicionados
     */
    private void notificarStatusSimulacao() {

        Collection<VerificarStatusListener> tl;
        synchronized (this) {
            // Clonar para evitar problemas de sincronização
            // durante a propagação do evento
            tl = (Collection) (((ArrayList) verificarStatusListeners).clone());
        }
        VerificarStatusEvent evento = new VerificarStatusEvent(this);
        for (VerificarStatusListener t : tl) {
            t.simlacaoFDTDTerminada(evento);
        }
    }
}

